<?php
include_once('include/Config.php');
include_once('entities/Usuario.php');

Class UsuarioDAL {

    private $link;
    
    public $result;
    public $errorDesc;


    public function __construct() {
        $this->conectar();
    }

    private function conectar() {
        
        //Tomado del config.php 
        $this->link = $GLOBALS["DBConnPDO"];
        
    }

    public function obtenerUsuarios() {
        $sql = "SELECT * from usuario";
        $lista = array();
        $listaUsuario = array();


        foreach ($this->link->query($sql) as $row) {

            $usuario = new Usuario();

            $usuario->setCodInterno($row['CodInterno']);
            $usuario->setIdUsuario($row['idUsuario']);
            $usuario->setIsBorrado($row['isBorrado']);
            $usuario->setIsAdmin($row['isAdmin']);
            $usuario->setNickName($row['NickName']);
            $usuario->setNombreApellido($row['NombreApellido']);
            $usuario->setPassword($row['Password']);
            $usuario->setMail($row['Email']);
            $usuario->setIdEmpresa($row['idEmpresa']);
            
            $listaUsuario [] = $usuario;
        }
        return $listaUsuario;
    }
    
    public function obtenerUsuariosFiltro($param) {
        $sql = "SELECT * from usuario " . $param;
        $lista = array();
        $listaUsuario = array();


        foreach ($this->link->query($sql) as $row) {

            $usuario = new Usuario();

            $usuario->setCodInterno($row['CodInterno']);
            $usuario->setIdUsuario($row['idUsuario']);
            $usuario->setIsBorrado($row['isBorrado']);
            $usuario->setIsAdmin($row['isAdmin']);
            $usuario->setNickName($row['NickName']);
            $usuario->setNombreApellido($row['NombreApellido']);
            $usuario->setPassword($row['Password']);
            $usuario->setMail($row['Email']);
            $usuario->setIdEmpresa($row['idEmpresa']);
            
            $listaUsuario [] = $usuario;
        }
        return $listaUsuario;
    }

    public function obtenerUsuariosHabilitados() {
        $sql = "SELECT * from usuario where isBorrado = 0";
        $lista = array();
        $listaUsuario = array();


        foreach ($this->link->query($sql) as $row) {

            $usuario = new Usuario();

            $usuario->setCodInterno($row['CodInterno']);
            $usuario->setIdUsuario($row['idUsuario']);
            $usuario->setIsBorrado($row['isBorrado']);
            $usuario->setIsAdmin($row['isAdmin']);
            $usuario->setNickName($row['NickName']);
            $usuario->setNombreApellido($row['NombreApellido']);
            $usuario->setPassword($row['Password']);
            $usuario->setMail($row['Email']);
            $usuario->setIdEmpresa($row['idEmpresa']);
            
            $listaUsuario [] = $usuario;
        }
        return $listaUsuario;
    }

    public function insertarNuevoUsuario($usuario) {

        try {
           	$sqlInsert = "INSERT INTO `usuario` ( NickName, Password, NombreApellido, CodInterno, Email, idEmpresa, isAdmin, isBorrado) " . 
            		" VALUES (:NickName, :Password, :NombreApellido, :CodInterno, :Email, :idEmpresa, :isAdmin, :isBorrado );";
           
            $stmt = $this->link->prepare($sqlInsert);
            $nickname = $usuario->getNickName();
            $password = $usuario->getPassword();
            $nombreapel = $usuario->getNombreApellido();
            $codInterno = $usuario->getCodInterno();
            $email = $usuario->getMail();
            $idEmpresa = $usuario->getIdEmpresa();
            $isAdmin = $usuario->getIsAdmin();
            $isBorrado = $usuario->getIsBorrado();
            
            $stmt->bindParam(':NickName', $nickname, PDO::PARAM_STR, 100);
            $stmt->bindParam(':Password', $password, PDO::PARAM_STR, 100);
            $stmt->bindParam(':NombreApellido', $nombreapel, PDO::PARAM_STR);
            $stmt->bindParam(':CodInterno', $codInterno, PDO::PARAM_STR);
            $stmt->bindParam(':Email', $email, PDO::PARAM_STR);
            $stmt->bindParam(':idEmpresa', $idEmpresa, PDO::PARAM_STR);
            $stmt->bindParam(':isAdmin', $isAdmin, PDO::PARAM_BOOL);
            $stmt->bindParam(':isBorrado', $isBorrado, PDO::PARAM_BOOL);

            $stmt->execute();

            $this->result = 0;
            $this->errorDesc = "";
            return $this->link->lastInsertId();
            
        } catch (PDOException $e) {
            $this->result = -1;
            $this->errorDesc = $e->getMessage();
            return $this->result;
        }
    }

    public function bajaUsuario($usuario) {

        try {
            $stmt = $this->link->prepare('DELETE from `usuario` where idUsuario = :idUsuario;');
            $idUsuario = $usuario->getIdUsuario();
            $stmt->bindParam(':idUsuario', $idUsuario, PDO::PARAM_INT);
            $stmt->execute();
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
    }

    public function validaUsuario($usuario, $pass) {
        $sql = "select u.NickName, u.NombreApellido, u.isAdmin, u.idEmpresa, u.idUsuario, e.Icono ";
        $sql .= "from usuario u ";
        $sql .= "left join empresa e on e.idEmpresa = u.idEmpresa ";
        $sql .="where u.NickName = :NickName and u.Password = :Password;";
        
        $stmt = $this->link->prepare($sql);
        $stmt->bindParam(':NickName', $usuario, PDO::PARAM_STR);
        $stmt->bindParam(':Password', $pass, PDO::PARAM_STR);

        $stmt->execute();
        $result = $stmt->fetchAll();

        $usuario = new Usuario();
        foreach ($result as $row) {
            $usuario->setNickName($row['NickName']);
            $usuario->setPassword($row['Password']);
            $usuario->setIsAdmin($row['isAdmin']);
            $usuario->setIdEmpresa($row['idEmpresa']);
            $usuario->setIdUsuario($row['idUsuario']);
            $usuario->setIcono($row['Icono']);
            $usuario->setNombreApellido($row['NombreApellido']);
        }
        $dbh = null;

        return $usuario;
    }

    public function modificarUsuario($usuario) {

        try {
        		$sqlUpdate = "UPDATE usuario SET NickName = :NickName, Password = :Password, NombreApellido = :NombreApellido, CodInterno = :CodInterno, Email = :Email, idEmpresa = :idEmpresa, isAdmin = :isAdmin  WHERE idUsuario = :idUsuario;";
            $stmt = $this->link->prepare($sqlUpdate);
            
            $idUsuario = $usuario->getIdUsuario();
            $nickname = $usuario->getNickName();
            $password = $usuario->getPassword();
            $nombreapel = $usuario->getNombreApellido();
            $codInterno = $usuario->getCodInterno();
            $email = $usuario->getMail();
            $idEmpresa = $usuario->getIdEmpresa();
            $isAdmin = $usuario->getIsAdmin();
            $isBorrado = $usuario->getIsBorrado();

            $stmt->bindParam(':NickName', $nickname, PDO::PARAM_STR, 100);
            $stmt->bindParam(':Password', $password, PDO::PARAM_STR, 100);
            $stmt->bindParam(':NombreApellido', $nombreapel, PDO::PARAM_STR);
            $stmt->bindParam(':CodInterno', $codInterno, PDO::PARAM_STR);
            $stmt->bindParam(':Email', $email, PDO::PARAM_STR);
            $stmt->bindParam(':idEmpresa', $idEmpresa, PDO::PARAM_STR);
            $stmt->bindParam(':isAdmin', $isAdmin, PDO::PARAM_BOOL);
            $stmt->bindParam(':idUsuario', $idUsuario, PDO::PARAM_INT);
            $stmt->execute();
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
    }

    public function updateIsBorrado($usuarioABorrar) {

        try {
            $stmt = $this->link->prepare('UPDATE usuario SET isborrado = :isBorrado WHERE idUsuario = :idUsuario;');
            $idUsuario = $usuarioABorrar;
            $isBorrado = TRUE;
            $stmt->bindParam(':idUsuario', $idUsuario, PDO::PARAM_INT);
            $stmt->bindParam(':isBorrado', $isBorrado, PDO::PARAM_BOOL);
            $stmt->execute();
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
    }
    
    function comboUsuarioHTML() {
        $query = "select idUsuario, NombreApellido FROM usuario order by idUsuario asc ";
        $result = '';

        $result .= '<option value="0"> </option>';
        
        foreach ($this->link->query($query) as $row) {
            $result .= '<OPTION VALUE="' . $row['idUsuario'] . '">' . $row['NombreApellido'] . '</OPTION>';
        }      
        
            return $result;
    }    

}

?>